export default {parsXml,getItem}

function getItem(data:string,name:string):string{
    let head=`<${name}`,tall = `<\\/${name}>`
    let da = data.match(new RegExp(`(?<=${head})[^]*(?=${tall})`,"g"))?.[0]
    return da?.replace(/[^]*?>/,"").replace(/^[ \n]*|[ \n]*$/g,"")
}

function parsXml(data:string){
    let label=undefined;
    // 获取下面的<> 标签
    let value = "";
    let arr = [];
    let son = [];
    while(true){
        let lab = data.match(/[^]*?<.*?>/g)?.[0];
        if(lab){
            value += lab.replace(/<.*?>/,"");
            let headortall = lab.match(/(?<=<).*(?=>)/g)[0];
            // 判断看看是头还是尾
            if(headortall[0]==="/"){
                // 看看是不是正常的尾部
                if(label.includes(headortall.substring(lab.length-2))){
                    // 正常的尾部
                    arr.push({
                        label:headortall.substring(1),
                        ...pars(label),
                        value:value.replace(/^[ \n]*|[ \n]*$/g,""),
                        son
                    })
                    son = [];
                    value = "";
                    label = undefined;
                }else{
                    // 不正常的部分，当作是内容解析
                    value+=lab;
                }
                data = data.substring(lab.length)
            }else{
                // 进入这里是头部
                if(label){
                    // 净化
                    let t = `</${headortall.replace(/ .*$/g,"")}>`
                    // 如果找不到尾部就当作内容解析
                    if(!data.includes(t)){
                        // 这是内容，不属于标签
                        value+=lab;
                        data = data.substring(data.indexOf(lab)+lab.length)
                    }else{
                        let h = `</${label.replace(/ .*$/g,"")}>`;
                        let index = data.lastIndexOf(h);
                        // 是头部，进行递归
                        son = parsXml(data.substring(0,index))
                        data = data.substring(index)
                    }
                }else{
                    label = headortall;
                    data = data.substring(lab.length);
                    value = "";
                }
            }
        }else{
            // 没有下面的标签了，直接返回
            return arr;
        }
    }
    
    function pars(str:string){
        let obj = {};
        let a = str.match(/ [^ ]*?[ ]*=[ ]*(.*?"){2}/g);
        a && a.forEach((e:any)=>{
            e = e.replace(/^[ ]*/,"");
            e = e.split("=");
            obj[e[0]]=JSON.parse(e[1])
        })
        return obj;
    }
}